package com.wc.data_structures.queue;

/**
 * @Author congge
 * @Date 2023/4/18 15:53
 * @description 使用数组来实现队列
 * 这个仅仅只能呢个使用一次
 */
public class ArrayQueueDemo {
    public static void main(String[] args) {

    }
}

class ArrayQueue {
    // 最大容量
    private final int maxSize;
    // 队头
    private int front;
    // 队尾
    private int rear;
    // 数组用存放数据
    private final int[] array;

    // 初始化队列
    public ArrayQueue(int maxSize) {
        this.maxSize = maxSize;
        array = new int[maxSize];
        // 指向队列头部，分析出front指向队列头的前一个位置
        front = -1;
        // 指向队列尾部，
        rear = -1;
    }

    // 判断队列是否是满的
    public boolean isFull() {
        return rear == maxSize - 1;
    }

    // 判断队列是否为空
    public boolean isEmpty() {
        return rear == front;
    }

    // 添加数据到队列
    public void addQueue(int num) {
        // 判断是否为满
        if (isFull()) {
            throw new RuntimeException("队列已满");
        }
        rear++;
        array[rear] = num;
    }

    // 出队列
    public int getQueue() {
        // 判断是否为空
        if (isEmpty()) {
            throw new RuntimeException("队列为空");
        }
        front++;
        return array[front];
    }

    // 获得队头
    public int peekQueue() {
        // 判断是否为空
        if (isEmpty()) {
            throw new RuntimeException("队列为空");
        }
        return array[front + 1];
    }

    // 展示队列
    public void showQueue() {
        if (isEmpty()) {
            System.out.println("数列为空");
            return;
        }
        for(int num:array){
            System.out.print("" + num);
        }
        System.out.println();
    }
}
